package tp.disenio.client;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import tp.disenio.client.CompetenciaDTO;

public class ListarParticipantes extends Composite{
	private Button btnVolver;
	private Button btnAgregarParticipante;
	private Button btnHome;
	private ClickHandler editarParticipante;
	private ClickHandler eliminarParticipante;
	private ScrollPanel scrollPanelParticipantes;
	private FlexTable flexTable;
	private Label lblUsuario;
	private Label lblSalir;
	private CompetenciaDTO competencia;
	private ArrayList<String> listadoBotonDeEditar = new ArrayList<String>();
	private ArrayList<String> listadoBotonDeEliminar = new ArrayList<String>();
	private ArrayList<ParticipanteDTO> listadoParticipantes;
	final RootPanel rootPanel;



	public ListarParticipantes(String user,CompetenciaDTO competencia) {
		
		rootPanel = RootPanel.get("nameFieldContainer");
		
		AbsolutePanel absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("1024px", "576px");
		
		setCompetencia(competencia);
		
		// WIDGETS
		
		btnHome = new Button("Home");
		absolutePanel.add(btnHome, 100, 100);
			
		btnAgregarParticipante = new Button("Agregar Participante");
		absolutePanel.add(btnAgregarParticipante, 330, 425);
		
		btnVolver = new Button("Volver");
		absolutePanel.add(btnVolver, 260, 425);
		
		scrollPanelParticipantes = new ScrollPanel();
		absolutePanel.add(scrollPanelParticipantes, 240, 230);
		scrollPanelParticipantes.setSize("620px", "180px");
		
		flexTable = new FlexTable();
		scrollPanelParticipantes.setWidget(flexTable);
		flexTable.setSize("100%", "100%");
		
		cargarParticipantes();
		
		// LABELS 
		
		Label lblParticipantesDeLa = new Label("Participantes de la competencia");
		lblParticipantesDeLa.setStyleName("subTitulo");
		absolutePanel.add(lblParticipantesDeLa, 355, 140);
		
		lblUsuario = new Label("");
		lblUsuario.setText(user);
		lblUsuario.setStyleName("usuarioLabel");
		absolutePanel.add(lblUsuario, 820, 95);
		
		lblSalir = new Label("Salir");
		lblSalir.setStyleName("usuarioLabel");
		absolutePanel.add(lblSalir, 780, 95);
		
		Label lblNombre = new Label("Nombre");
		lblNombre.setStyleName("camposTabla");
		absolutePanel.add(lblNombre,240,190);

		Label lblEmail = new Label("E-mail");
		lblEmail.setStyleName("camposTabla");
		absolutePanel.add(lblEmail,390,190);
		
		Label lblFoto = new Label("Foto");
		lblFoto.setStyleName("camposTabla");
		absolutePanel.add(lblFoto,560,190);
		
		Label lblEditar = new Label("Editar");
		lblEditar.setStyleName("camposTabla");
		absolutePanel.add(lblEditar,670,190);
		
		Label lblEliminar = new Label("Eliminar");
		lblEliminar.setStyleName("camposTabla");
		absolutePanel.add(lblEliminar,750,190);
	
		
		// Cargando listado de participantes
		
		cargarParticipantes();
		
		
		// HANDLERS
		
		getLblUsuario().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
			
				Window.alert("Modficar Datos Usuario ");
				
			}
		});
		
		
		getLblSalir().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new Ingreso(),(Window.getClientWidth()/3),150);
				Window.alert("Usted se ha deslogeado");
				
			}
		});
		
		getBtnAgregarParticipante().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new AltaParticipante(getLblUsuario().getText(),getCompetencia()),100,50);
			}
		});
		
		getBtnHome().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new HomeUA(getLblUsuario().getText()),100,50);
			}
		});
		
		getBtnVolver().addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
//				setVisibilidad(false);
				rootPanel.remove(rootPanel.getWidget(1));
				rootPanel.add(new VerCompetenciaUA(getLblUsuario().getText(),getCompetencia()),100,50);
			}
		});
		
	}
	
	public void cargarParticipantes(){
		
		final ListarParticipantesServiceAsync listarParticipantes = GWT.create(ListarParticipantesService.class);
		
		
		AsyncCallback<ArrayList<ParticipanteDTO>> callback = new AsyncCallback<ArrayList<ParticipanteDTO>>(){
			
			@Override
			public void onSuccess(ArrayList<ParticipanteDTO> result) {
				
				setListadoParticipantes(result);
				
				flexTable.setStyleName("FlexTable");
				
				for(int i=0; i<getListadoParticipantes().size(); i++){
					
					flexTable.setText(i, 0,getListadoParticipantes().get(i).getNombre());
					flexTable.setText(i, 1,getListadoParticipantes().get(i).getEmail());
//					flexTable.setWidget(i, 2,getListadoParticipantes().get(i).getFoto());				
					
					flexTable.getRowFormatter().addStyleName(i, "FlexTable");		
					
					flexTable.getColumnFormatter().setWidth(0, "30px");
					flexTable.getColumnFormatter().setWidth(1, "60px");
					flexTable.getColumnFormatter().setWidth(2, "80px");
					flexTable.getColumnFormatter().setWidth(3, "60px");
					flexTable.getColumnFormatter().setWidth(4, "60px");
									
					Image imgPersona = new Image("images/persona.jpg");
					imgPersona.setSize("60px", "50px");
					
					Image imgEditar = new Image("images/editar1.png");
					imgEditar.setSize("30px", "25px");
						
					Image imgEliminar = new Image("images/eliminar1.gif");
					imgEliminar.setSize("30px", "25px");
									
					final String symbolEditar = i+"1";
					final String symbolEliminar = i+"1";
					
					getListadoBotonDeEditar().add(symbolEditar);
					getListadoBotonDeEliminar().add(symbolEliminar);
					
					flexTable.setWidget(i, 2, imgPersona);
					flexTable.setWidget(i, 3, imgEditar);
					flexTable.setWidget(i, 4, imgEliminar);
					
			
					imgEditar.addClickHandler(new ClickHandler() {
						
						@Override
						public void onClick(ClickEvent event) {
							
							Window.alert("En construccion Editar Participante");
							// TODO Auto-generated method stub
							
//							setVisibilidad(false);
//							    
//							int fila = getListadoBotonDeEditar().indexOf(symbolEditar);
//							getListadoBotonDeEditar().remove(symbolEditar);
							
							//Pantalla para editar participante
											
						}
					});
				
					imgEliminar.addClickHandler(new ClickHandler() {
						
						@Override
						public void onClick(ClickEvent event) {
							
							Window.alert("En construccion Eliminar Participante");
							
							
							
							// TODO Auto-generated method stub
							
//							setVisibilidad(false);
//							int fila = getListadoBotonDeEditar().indexOf(symbolEliminar);
//							getListadoBotonDeEditar().remove(symbolEliminar);
							
							// Pantalla para eliminar participante
//							
						}
					});
					
				}
			
				
				
				
				
				
				
				
				
				
				
				
				}
			
			@Override
			public void onFailure(Throwable caught) {
							
					Window.alert(caught.getMessage());
				
				
				}
				
		};
		
		
		listarParticipantes.listarParticipantes(getCompetencia(),callback);
		
		
		
		// TAB INDEX
		
		getBtnHome().setTabIndex(1);
		getScrollPanelParticipantes().getElement().setTabIndex(2);
		getBtnVolver().setTabIndex(3);
		getBtnAgregarParticipante().setTabIndex(4);
	}
	
	
	public Label getLblUsuario() {
		return lblUsuario;
	}
	public void setLblUsuario(Label lblUsuario) {
		this.lblUsuario = lblUsuario;
	}
	public Label getLblSalir() {
		return lblSalir;
	}
	public Button getBtnVolver() {
		return btnVolver;
	}
	public Button getBtnAgregarParticipante() {
		return btnAgregarParticipante;
	}
	public Button getBtnHome() {
		return btnHome;
	}

	public void setVisibilidad(boolean estado){
		this.setVisible(estado);
	}
	

	/**
	 * @return the competencia
	 */
	public CompetenciaDTO getCompetencia() {
		return competencia;
	}

	/**
	 * @param competencia the competencia to set
	 */
	public void setCompetencia(CompetenciaDTO competencia) {
		this.competencia = competencia;
	}
	
	/**
	 * @return the listadoBotonDeEditar
	 */
	public ArrayList<String> getListadoBotonDeEditar() {
		return listadoBotonDeEditar;
	}

	/**
	 * @return the listadoBotonDeEliminar
	 */
	public ArrayList<String> getListadoBotonDeEliminar() {
		return listadoBotonDeEliminar;
	}
	

	/**
	 * @return the listadoParticipantes
	 */
	public ArrayList<ParticipanteDTO> getListadoParticipantes() {
		return listadoParticipantes;
	}

	/**
	 * @param listadoParticipantes the listadoParticipantes to set
	 */
	public void setListadoParticipantes(
			ArrayList<ParticipanteDTO> listadoParticipantes) {
		this.listadoParticipantes = listadoParticipantes;
	}


	/**
	 * @return the rootPanel
	 */
	public RootPanel getRootPanel() {
		return rootPanel;
	}
	
	public ScrollPanel getScrollPanelParticipantes() {
		return scrollPanelParticipantes;
	}


}
